#include "ASMInstruction.hpp"
#include "CodeGen.hpp"
#include "Module.hpp"

#include <iostream>
#include <memory>
#include <unordered_map>

void translate_main(CodeGen *codegen); // 将 main 函数翻译为汇编代码

int main() {
    auto *module = new Module();
    auto *codegen = new CodeGen(module);

    // 告诉汇编器将汇编放到代码段
    codegen->append_inst(".text", ASMInstruction::Atrribute);

    translate_main(codegen);

    std::cout << codegen->print();
    delete codegen;
    delete module;
    return 0;
}

// TODO: 按照自己的理解翻译main函数，可以按照注释中的步骤，也可自由发挥
void translate_main(CodeGen *codegen) {
    std::unordered_map<std::string, int> offset_map;

    /* 声明 main 函数 */
   
    /* main 函数开始 */
    
    /* main 函数的 Prologue (序言) */
    
    /* main 函数的 label_entry */
    
    /* %op0 = icmp sgt i32 5, 1 */
    
    /* %op1 = zext i1 %op0 to i32 */
    
    /* %op2 = icmp ne i32 %op1, 0 */
    
    /* br i1 %op2, label %label3, label %label4 */
    
    /* label3: */
   
    /* ret i32 233 */
    
    /* label4: */
    
    /* ret i32 0 */
    
    /* main 函数的 Epilogue (收尾) */
    
}
